package com.cloudsea.yunhaiserver.task;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.cloudsea.yunhaistores.entity.PaymentOrders;
import com.cloudsea.yunhaistores.mapper.PaymentOrdersMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

@Component
public class OrderTask {

    private static final Logger log = LoggerFactory.getLogger(OrderTask.class);

    @Autowired
    private PaymentOrdersMapper paymentOrdersMapper;

    // 定义常量，方便修改
    private static final int ORDER_AUTO_COMPLETE_HOURS = 2; // 设置为2小时

    /**
     * 定时任务：自动完成超过指定时间的“待取餐”订单
     * fixedDelayString = "PT2H" 表示上次任务结束后，延迟2小时再执行
     * initialDelayString = "PT1M" 表示服务启动后，延迟1分钟开始第一次执行
     * 这种写法比直接写毫秒数更具可读性
     */
    @Scheduled(fixedDelayString = "PT2H", initialDelayString = "PT1M")
    public void autoCompleteOrders() {
        log.info("开始执行【自动完成超时订单】定时任务...");

        // 1. 定义时间阈值：当前时间减去我们设定的小时数
        LocalDateTime timeThreshold = LocalDateTime.now().minusHours(ORDER_AUTO_COMPLETE_HOURS);

        // 2. 创建更新条件
        UpdateWrapper<PaymentOrders> updateWrapper = new UpdateWrapper<>();
        updateWrapper
                .eq("fulfillment_status", 2) // 条件1: 状态为“待取餐”
                .lt("created_at", timeThreshold) // 条件2: 订单创建时间早于2小时前
                .set("fulfillment_status", 3); // 将状态更新为 3:“已完成”

        // 3. 执行批量更新
        int updatedRows = paymentOrdersMapper.update(null, updateWrapper);

        if (updatedRows > 0) {
            log.info("任务执行完毕：共自动完成了 [{}] 个超时订单。", updatedRows);
        } else {
            log.info("任务执行完毕：没有需要自动完成的超时订单。");
        }
    }
}
